package com.mj.util;

import java.util.Calendar;
import java.util.Date;
import java.util.UUID;

import redis.clients.jedis.Jedis;

/**
 * ID工具类
 * 
 * @author majie
 *
 */
public class IDUtils {

	/**
	 * 获取32位UUID
	 * 
	 * @return
	 */
	public static String getID() {
		return get36UUID().replace("-", "");
	}

	/**
	 * 获取36位UUID`
	 * 
	 * @return
	 */
	public static String get36UUID() {
		return UUID.randomUUID().toString();
	}

	/**
	 * 订单id前缀
	 * 格式:xx年第xxx天的xx小时
	 * 当前时间   17年第182天12时  ------------->  1718212
	 */
	public static String getOrderIdPrefix(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		int year = c.get(Calendar.YEAR);
		int day = c.get(Calendar.DAY_OF_YEAR);
		int hour = c.get(Calendar.HOUR_OF_DAY);
		// 补齐 第一个参数由1$引用(参数在参数列表中的位置) 03d三位数不够就补0
		String dayFmt = String.format("%1$03d", day);
		String hourFmt = String.format("%1$02d", hour);
		return (year - 2000) + dayFmt + hourFmt;
	}

	/**
	 * 从redis中获取订单id
	 * 格式:前缀+自增量
	 * @param prefix
	 * @return
	 */
	public static Long getId(String prefix) {
		Jedis jedis = RedisUtil.getJedis();
		String key = "order_id:" + prefix;
		String orderId = null;
		try {
			long index = jedis.incr(key);
			// 开关,5分钟,数据加密,归零
			jedis.expire(key, 5 * 60 * 60); // 防止在一个小时生成99w订单
			orderId = prefix + String.format("%1$05d", index);
			return Long.valueOf(orderId);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("从redis获取订单失败");
		}finally {
			jedis.close();
		}
		return null;
	}

	public static void main(String[] args) {
		for (int i=0;i<1000;i++) {
			Long id = getId(IDUtils.getOrderIdPrefix(new Date()));
			System.out.println(id);
			
		}
	}
}
